#ifndef HTU31_H
#define HTU31_H

#include "driver/i2c.h"
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

// HTU31 I2C地址
#define HTU31_I2C_ADDR_1    0x40    // 备用I2C地址（未使用）
#define HTU31_I2C_ADDR_2    0x41    // 当前使用的I2C地址

// HTU31 命令定义 (参考Adafruit库)
#define HTU31_CMD_CONVERSION        0x40    // 开始转换命令
#define HTU31_CMD_READ_TEMP_HUM     0x00    // 读取温湿度数据
#define HTU31_CMD_READ_SERIAL       0x0A    // 读取序列号
#define HTU31_CMD_SOFT_RESET        0x1E    // 软复位
#define HTU31_CMD_HEATER_ON         0x04    // 加热器开启
#define HTU31_CMD_HEATER_OFF        0x02    // 加热器关闭

// 转换延时时间 (ms) - 参考Adafruit库
#define HTU31_CONVERSION_DELAY      20

// 数据结构
typedef struct {
    float temperature;      // 温度值 (°C)
    float humidity;         // 湿度值 (%RH)
} htu31_data_t;

typedef struct {
    i2c_port_t i2c_port;          // I2C端口
    uint8_t device_addr;           // 设备I2C地址
    bool initialized;              // 初始化状态
    float temperature_offset;      // 温度校准偏移量 (°C) - 手动设置
    float humidity_offset;         // 湿度校准偏移量 (%RH) - 手动设置
} htu31_handle_t;

// 函数声明
esp_err_t htu31_init(htu31_handle_t *handle, i2c_port_t i2c_port, uint8_t device_addr);
esp_err_t htu31_soft_reset(htu31_handle_t *handle);
esp_err_t htu31_read_temperature_humidity(htu31_handle_t *handle, htu31_data_t *data);
esp_err_t htu31_read_temperature(htu31_handle_t *handle, float *temperature);
esp_err_t htu31_read_humidity(htu31_handle_t *handle, float *humidity);
esp_err_t htu31_heater_enable(htu31_handle_t *handle, bool enable);
esp_err_t htu31_read_serial_number(htu31_handle_t *handle, uint32_t *serial_number);
bool htu31_is_connected(htu31_handle_t *handle);

// 手动校准函数
esp_err_t htu31_set_temperature_offset(htu31_handle_t *handle, float offset);
esp_err_t htu31_set_humidity_offset(htu31_handle_t *handle, float offset);
float htu31_get_temperature_offset(htu31_handle_t *handle);
float htu31_get_humidity_offset(htu31_handle_t *handle);

// CRC校验函数 (HTU31专用)
uint8_t htu31_crc8(uint16_t value);
bool htu31_check_crc(uint16_t value, uint8_t expected_crc);

#ifdef __cplusplus
}
#endif

#endif // HTU31_H 